Utilizou-se a base de dados do [Github] (https://github.com/dssg-pt/covid19pt-data)
sintomas <- as.data.frame(t(covid.pt[173, 41:46]))
sintomas <- sintomas %>%
rownames_to_column(var="Sintomas")
names(sintomas)[2] <- "Frequência"
ggplot(sintomas, aes(x=Sintomas, y=Frequência*100)) +
geom_col(fill="darksalmon", width = 0.6) +
scale_x_discrete(labels= c("Cefaleia", "Dificuldade\nrespiratória", "Dores\nmusculares", "Febre", "Fraqueza\ngeneralizada", "Tosse")) +
theme_classic() +
labs(y="Frequência (%)",x="") +
#labs(title = "Frequência de sintomas da COVID-19")+
theme(plot.title = element_text(size = 17, hjust = 0.5)) +
theme(axis.title.x = element_text(size = 15), axis.title.y = element_text(size = 15)) +
geom_text(aes(label = scales::percent(Frequência, digits=4)), vjust=-0.5)
As percentagens apresentadas neste gráfico de barras referem-se à percentagem de casos infetados que reportaram cada um dos sintomas. É de notar que a amostra não tem a dimensão desejada uma vez que só foram registados estes dados durante 167 dias. Assim, é facilmente perceptível que a tosse é o sinal clínico mais frequente, seguido da febre.
sintomas_tempo <- as.data.frame((covid.pt[8:173,41:46]*covid.pt$confirmados[8:173])-(covid.pt[7:172,41:46]*covid.pt$confirmados[7:172]))/covid.pt$confirmados_novos[8:173]
sintomas_tempo_2 <- rbind(covid.pt[7,41:46], sintomas_tempo)
sintomas_tempo_3 <- cbind(covid.pt$data[7:173], sintomas_tempo_2)
names(sintomas_tempo_3) <- c("Data", "Tosse", "Febre", "Dificuldade respiratória", "Cefaleia", "Dores musculares", "Fraqueza generalizada")
sintomas_tempo_3[3,4] <- 0.11
sintomas_tempo_melt <- melt(sintomas_tempo_3, id.vars="Data")
names(sintomas_tempo_melt)[-1] <- c("Sintomas", "Valores")
ggplot(sintomas_tempo_melt, aes(x = Data, y = Valores*100, color = Sintomas)) +
geom_line() +
facet_grid(sintomas_tempo_melt$Sintomas) + ## para separar em varios graficos
guides(color = FALSE) +
labs(size = 20) +
xlab("Mês") +
ylab("Frequência (%)")+
theme(plot.title = element_text(margin = margin(t = 20, r = 0, b = 20, l = 0), size = 17, color = "black", hjust = 0.5)) +
theme(axis.title.y = element_text(margin = margin(t = 0, r = 20, b = 0, l = 20), size = 13)) +
theme(axis.title.x = element_text(margin = margin(t = 20, r = 0, b = 20, l = 0), size = 13)) +
theme(strip.text.y = element_text(color = "black", size = 8, angle = 0))
Neste gráfico de linhas vemos as frequências dos sinais clínicos dos novos casos de cada dia, ou seja, não cumulativos. Os valores negativos significam que houve uma diminuição na percentagem de pessoas com determinado sinal clinico. ?Os valores positivos, mas menores do que o do dia anterior, significam que houve crescimento menor do que do dia anterior?
femininos <- as.data.frame(covid.pt %>%
dplyr::select(starts_with("confirmados_") & (ends_with("9_f")| ends_with("plus_f"))))
masculinos <- as.data.frame(covid.pt %>%
dplyr::select((starts_with("confirmados_") & (ends_with("9_m")| ends_with("plus_m")))))
casos_femininos <- as.data.frame(lapply(femininos, last))
casos_masculinos <- as.data.frame(lapply(masculinos, last))
casos_total <- as.data.frame(casos_femininos + casos_masculinos)
casos_femininos_invertido <- as.data.frame(t(casos_femininos))
casos_femininos_invertido <- casos_femininos_invertido %>%
rownames_to_column(var = "Idade")
names(casos_femininos_invertido)[2] <- "Feminino"
casos_femininos_invertido[,1] <- c("0-9", "10-19", "20-29", "30-39", "40-49", "50-59", "60-69", "70-79", "80+")
casos_masculinos_invertido <- as.data.frame(t(casos_masculinos))
casos_masculinos_invertido <- casos_masculinos_invertido %>%
rownames_to_column(var = "Idade")
names(casos_masculinos_invertido)[2] <- "Masculino"
casos_masculinos_invertido[,1] <- c("0-9", "10-19", "20-29", "30-39", "40-49", "50-59", "60-69", "70-79", "80+")
casos_total_invertido <- as.data.frame(t(casos_total))
casos_total_invertido <- casos_total_invertido %>%
rownames_to_column(var = "Idade")
names(casos_total_invertido)[2] <- "Total"
casos_total_invertido[,1] <- c("0-9", "10-19", "20-29", "30-39", "40-49", "50-59", "60-69", "70-79", "80+")
casos_fem_masc <- merge(casos_femininos_invertido, casos_masculinos_invertido, by = "Idade")
casos_fem_masc_tot <- merge(casos_fem_masc, casos_total_invertido, by = "Idade")
casos_grupo_etario_genero_melted <- reshape2::melt(casos_fem_masc_tot, id.vars = "Idade")
names(casos_grupo_etario_genero_melted)[2:3] <- c("Género","Nº_casos")
grafico_casos_idade_sexo <- ggplot(casos_grupo_etario_genero_melted, aes(x=Idade, y=Nº_casos, fill=Género)) +
geom_col(width = 0.9, position = "dodge") +
theme_classic() +
labs(y="Nº de casos", x="") +
theme(plot.title = element_text(size = 17, hjust = 0.5)) +
theme(axis.title.x = element_text(size = 1, margin = margin(t=10, r=1, b= 2, l=1)), axis.title.y = element_text(size = 15)) +
scale_fill_manual(values = c("pink2", "steelblue3", "grey71")) +
scale_y_continuous(expand = c(0,0)) +
coord_cartesian(ylim = c(0, max(casos_grupo_etario_genero_melted$Nº_casos)+500))
ggplotly(grafico_casos_idade_sexo)
Neste gráfico podemos ver que a maior parte dos casos existentes são das faixas etárias dos 20 aos 59 anos. Este valor parece fazer sentido uma vez que corresponde à população ativa, geralmente a população mais exposta. No entanto, é importante realçar que neste gráfico não se teve em consideração a porporção da população de cada faixa etária, o que significa que pode haver mais casos nestas faixas etárias por serem simultaneamnete as faixas etárias com maior número de pessoas em Portugal. Por outro lado é visível que, ao longo de todas as faixas etárias, o género feminino é o que tem maior número de casos. Novamente, este dado por não ser estatisticamente viável pode não se ter tido em conta a porporção de pessoas do sexo feminino existentes na população.
regioes_casos <- as.data.frame(t(as.data.frame(lapply(covid.pt[,4:10], last))))
regioes_casos <- regioes_casos %>%
rownames_to_column(var="Regiões")
names(regioes_casos)[2] <- "Nº_casos"
ggplot(regioes_casos, aes(x=Regiões, y=Nº_casos)) +
geom_col(fill="plum3", width = 0.5) +
scale_x_discrete(labels= c("Açores", "Alentejo", "Algarve", "Centro", "Lisboa e Vale do Tejo", "Norte", "Madeira")) +
theme_classic() +
labs(y="Nº de casos", x="") +
theme(plot.title = element_text(size = 20, hjust = 0.5)) +
theme(axis.title.x = element_text(size = 15), axis.title.y = element_text(size = 15)) +
geom_text(aes(label=Nº_casos), vjust=-0.5)
regioes_casos_ordem <- regioes_casos[c(4,5,6,2,7,1,3),] # colocar as regioes pela ordem do mapa
regioes_casos_ordem[,1] <- c("Alentejo", "Algarve", "Açores", "Centro", "Madeira", "Norte", "Lisboa e Vale do Tejo" )
pal_casos <- colorBin("Blues", bins = c(0,300, 2000, 6000, 20000, 30000, Inf)) ## tonalidade das cores consoante os casos
labels_casos <- paste( #tornar o mapa interativo
"<strong>", regioes_casos_ordem[,1],"</strong><br/>",
regioes_casos_ordem[,2], " casos<br/>",
sep="") %>%
lapply(htmltools::HTML)
leaflet(mapa_portugal) %>%
addPolygons(stroke = TRUE, smoothFactor = 0.3, fillOpacity = 1, color = "black", weight = 1,
fillColor = ~pal_casos(regioes_casos_ordem$Nº_casos),
label = labels_casos,
labelOptions = labelOptions(style = list("font-weight" = "normal", padding = "3px 8px"), textsize = "13px", direction = "auto")) %>%
addLegend("bottomleft", pal = pal_casos, values = regioes_casos_ordem$Nº_casos, opacity = 0.5, title = "Nº de casos por ARS") %>%
addTiles(group ="Original") %>%
addProviderTiles(providers$CartoDB.Positron, group = "Positron") %>%
addProviderTiles(providers$Esri.WorldImagery, group = "Satélite") %>%
addLayersControl(baseGroups = c("Original", "Positron", "Satélite"), options = layersControlOptions(collapsed = FALSE))